package com.mdhw.utils;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;

/**
 * 阿里云oss Server
 *
 * @author zxt
 */
@Slf4j
@Service
public class AliYunOssServer {

    @Value("${ali.accessKeyId}")
    private String aliAccessKeyId;
    @Value("${ali.accessKeySecret}")
    private String aliAccessKeySecret;
    @Value("${ali.oss.bucket}")
    private String bucketName;
    @Value("${ali.oss.endpoint}")
    private String endpoint;
    @Value("${ali.oss.prefixUrl}")
    private String urlPrefix;


    /**
     * 上传文件到阿里云oss
     * @param inputStream 文件输入流
     * @param objectName 上传文件到OSS时需要指定包含文件后缀在内的完整路径，例如abc/efg/123.jpg
     * @return
     */
    public AliYunOssResult upload(InputStream inputStream, String objectName) {
        AliYunOssResult aliyunOssResult = new AliYunOssResult();
        try {
            // Endpoint以杭州为例，其它Region请按实际情况填写。
            //String endpoint = aliYunOssCode.getEndpoint();
            // 阿里云主账号AccessKey拥有所有API的访问权限，风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维，请登录RAM控制台创建RAM账号。
            //String accessKeyId = aliYunOssCode.getAccessKeyId();
            //String accessKeySecret = aliYunOssCode.getAccessKeySecret();
            //String bucketName = aliYunOssCode.getBucketName();
            // 创建OSSClient实例。
            OSS ossClient = new OSSClientBuilder().build(this.endpoint, this.aliAccessKeyId, this.aliAccessKeySecret);

            // 上传文件到指定的存储空间（bucketName）并将其保存为指定的文件名称（objectName）。
            ossClient.putObject(this.bucketName, objectName, inputStream);
            // 关闭OSSClient。
            ossClient.shutdown();

            aliyunOssResult.setCode(200);
            aliyunOssResult.setUrl(String.format("%s/%s", urlPrefix, objectName));
            aliyunOssResult.setMsg("上传成功");
        } catch (OSSException e) {
            e.printStackTrace();
            aliyunOssResult.setCode(400);
            aliyunOssResult.setMsg("上传失败");
        }
        return aliyunOssResult;
    }


}
